#include "hardware.h"

void Output_IO_Config(void);
void In_IO_Config(void);
	
void hardware_Init(void)
{
	Output_IO_Config();
	In_IO_Config();
}

void Output_IO_Config(void)
{
	GPIO_InitType GPIO_InitStructure;
	
  /*Enable the LED Clock*/
  RCC_AHBPeriphClockCmd(LCD_BL_GPIO_RCC_CLK, ENABLE);
	RCC_AHBPeriphClockCmd(RCC_AHBPERIPH_GPIOA, ENABLE);

  /*Configure the LED pin as ouput push-pull*/
  GPIO_StructInit(&GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pins = LCD_BL_PIN;				 

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OutType = GPIO_OutType_PP;
  GPIO_InitStructure.GPIO_Pull = GPIO_Pull_NOPULL;
  GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_50MHz;	
  GPIO_Init(LCD_BL_GPIO_PORT, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pins = PWR_HOLD_PIN;
  GPIO_Init(PWR_HOLD_GPIO_PORT, &GPIO_InitStructure);
	
}

void In_IO_Config(void)
{
	GPIO_InitType GPIO_InitStructure;

  /*Enable the Button Clock*/
  RCC_AHBPeriphClockCmd(KEY_UP_GPIO_RCC_CLK, ENABLE);
	RCC_AHBPeriphClockCmd(KEY_DOWN_GPIO_RCC_CLK, ENABLE);
	RCC_AHBPeriphClockCmd(RCC_AHBPERIPH_GPIOA, ENABLE);

  /*Configure Button pin as input with pull-up/pull-down*/
  GPIO_StructInit(&GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pins = KEY_UP_PIN;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_Pull = GPIO_Pull_PU;

  GPIO_Init(KEY_UP_GPIO_PORT, &GPIO_InitStructure);
	

	GPIO_InitStructure.GPIO_Pins = KEY_DOWN_PIN;
  GPIO_Init(KEY_DOWN_GPIO_PORT, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pins = KEY_PWR_PIN;
  GPIO_Init(KEY_PWR_GPIO_PORT, &GPIO_InitStructure);
	
}

uint8_t KEY_UP_State(void)
{
  return GPIO_ReadInputDataBit(KEY_UP_GPIO_PORT, KEY_UP_PIN);
}

uint8_t KEY_DOWN_State(void)
{
  return GPIO_ReadInputDataBit(KEY_DOWN_GPIO_PORT, KEY_DOWN_PIN);
}


